#pragma once
#include "Cadena.h"
#include "AVLImp.h"
#include "Ciudad.h"
#include "IPais.h"
#include "Hash.h"
#include "CadenaFuncionHash.h"
#include "FuncionIgualesCadena.h"

class Pais : public IPais
{
	friend ostream& operator<<(ostream& out, const Pais& p);
public:
	Pais(Cadena nombre,int MaxCiudades);
	virtual ~Pais();

	virtual Cadena ObtenerNombre() const ;
	virtual int CantidadCiudades() const ;
	virtual Puntero<Iterador<pCiudad>> Ciudades() const ;
	virtual pCiudad ObtenerCapital() const;
	void SetCapital(Puntero<Ciudad> c);
	int CalcularRiqueza();

	//virtual bool operator==(const IPais& pais) const;
    Puntero<Hash<Cadena,Puntero<Ciudad>>> ObtenerHashCiudades() const;
	Puntero<AVLImp<Puntero<Ciudad>>> ObtenerCiudades() const;
	void sumarCiudad();
	bool tieneCapital();
	bool operator==(const Pais& p) const;
	bool operator!=(const Pais& p) const;
	bool operator<(const Pais& p) const;
    bool operator>(const Pais& p) const;
    bool operator<=(const Pais& p) const;
	bool operator>=(const Pais& p) const;
	

private:
	Cadena m_Nombre;
	Puntero<AVLImp<Puntero<Ciudad>>> m_Ciudades;
	Puntero<Ciudad> m_Capital;
	Puntero<Hash<Cadena,Puntero<Ciudad>>> hashCiudades;
	int cantidadCiudades;
	int riquezaRecursos;
};